package com.junbao.message.domain.repository;

import java.util.Date;
import java.util.List;

import com.junbao.message.domain.model.NotifyMessage;
import com.junbao.message.infrastructure.page.DataQuereyCondition;

/**
 * 消息资源库
 * @author yilin
 *
 */
public interface MessageRepository {
 
    /**
     * 消息保存
     * @param notifyMessage
     * @return
     */
    public int saveMessage(NotifyMessage notifyMessage);
    /**
     * 消息修改
     * @param notifyMessage
     * @return
     */
    public int updateMessage(NotifyMessage notifyMessage);
    /**
     * 根据消息序列号查询消息
     * @param messageSquece 消息序列号
     * @return
     */
    public NotifyMessage queryMessageByMessageSquece(String messageSquece);
    /**
     * 查询待确认消息
     * @return
     */
    public List<NotifyMessage> queryWaitConfirmMessage(Date conditionTime);
    /**
     * 查询待发送消息
     * @return
     */
    public List<NotifyMessage> queryWaitSendMessage(Date conditionTime);
    /**
     * 更新消息状态为待确认
     * @return
     */
    public int updateStatusToWaitConfirm();
    /**
     * 更新消息为死亡
     * @return
     */
    public int updateMessageToDead();
    /**
     * 根据消息序列将消息置为死亡
     * @param messageSquece 消息序列
     * @return
     */
    public int updateMessageToDead(NotifyMessage message);
    /**
     * 查询待移除的记录数
     * @param condition
     * @return
     */
    public int queryWaitRemvalTotalCount(DataQuereyCondition condition);
    /**
     * 根据条件查询待移除的消息
     * @param condition
     * @return
     */
    public List<NotifyMessage> queryWaitRemovalMessages(DataQuereyCondition condition);
    /**
     * 新增消息到历史表
     * @param notifyMessage
     * @return
     */
    public int addMessageToHistory(NotifyMessage notifyMessage);
    /**
     * 从消息表中删除已经被移除的消息
     * @param condition
     */
    public void deleteRemovaledMessageFromMessage(DataQuereyCondition condition);
    
    /**
     * 根据消息编号查询消息信息
     * @param messageNo 消息编号
     * @return
     */
    public NotifyMessage queryMessageByMessageNo(String messageNo);
    
    /**
     * 更新待发送消息为发送中
     * @param conditionTime 时间条件
     */
    public int updateWaitSendMessageStatusToSending(Date conditionTime);
    
    /**
     * 更新待确认消息为确认中
     * @param conditionTime 时间条件
     */
    public int updateWaitConfirmMessageStatusToConfriming(Date conditionTime);
    
    /**
     * 将确认中消息改为待确认
     */
    public void messageStatusToWaitConfirmFromConfirmingUpdate();
    
 
    /**
     * 将发送中消息改为待发送
     */
    public void messageStatusToWaitSendFromSendingUpdate();
}